//
//  NSString+SYExtension.h
//  siyanone
//
//  Created by LK-IOS on 2018/3/20.
//  Copyright © 2018年 LK-News. All rights reserved.
//

#import <Foundation/Foundation.h>

@class SYDecimalNumberHandler;

@interface NSString (SYExtension)

/**
 计算字符串的字节数(汉字占两个)
 
 @return 返回字节数目
 */
- (int)getByteNum;

/**
 从字符串中截取指定字节数
 
 @param index 指定的字节数目
 @return 返回截取好的字段
 */
- (NSString *)subStringByByteWithIndex:(NSInteger)index;
/**
 根据一个宽度，计算带有固定行间距字段的高
 
 @param str 要计算的字段
 @param font 字体大小
 @param width 固定宽度
 @return 返回高度
 */
+(CGFloat)getSpaceLabelHeight:(NSString*)str withFont:(UIFont*)font withWidth:(CGFloat)width;

/**
 生成一个带有行间距的富文本字段
 
 @param string 要渲染的字段
 @param space 行间距
 @param font 字体大小
 @return 返回的文本
 */
+(NSAttributedString *)createAttriStringWithString:(NSString *)string andSpace:(CGFloat)space Font:(UIFont *)font;


/**
 生成一个带有行间距和字间距的富文本字段
 
 @param string 要渲染的字段
 @param space 行间距
 @param wrapSpace 字间距
 @param font 字体大小
 @return 返回值
 */
+(NSAttributedString *)createLineWrapAttriStringWithString:(NSString *)string andLineSpace:(CGFloat)space withWrapSpace:(CGFloat)wrapSpace Font:(UIFont *)font;

/**
 计算带有行间距和字间距字段的高度
 
 @param str 字段
 @param font 字体大小
 @param width 宽度
 @param wrapSpace 字间距
 @param space 行间距
 @return 返回值
 */
+(CGFloat)getWrapSpaceLabelHeight:(NSString*)str withFont:(UIFont*)font withWidth:(CGFloat)width andWrapSpace:(CGFloat)wrapSpace withSpace:(CGFloat)space;


/**
 将字典转成字符串
 
 @param dict 字典
 @return 返回的字符串
 */
+(NSString *)dictionaryToJson:(NSDictionary *)dict;

/**
 将字符串转成字典
 
 @param jsonString 字典
 @return 返回的字典
 */
+(NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString;

/**
 计算一个字符串的尺寸
 
 @param text 字符串
 @param font 字体大小
 @param maxSize 最大计算尺寸
 @return 返回尺寸
 */
+(CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxSize:(CGSize)maxSize;



/**
 音乐播放界面的时间转换
 */
+ (NSString *)timeIntervalToMMSSFormat:(NSTimeInterval)interval;

/**
 转换时间秒为分钟和秒 mm:ss
 
 @param totalTime 总时间
 @return 返回值
 */
+(NSString *)getMMSSFromSS:(NSString *)totalTime;

/**
 渲染一个字符串
 
 @param string 需要渲染的字段
 @param changeColor 颜色
 @param font 字号
 @param sourceString 原字符串
 @return 返回一个经过选人的富文本
 */
+(NSAttributedString *)getAttriNeedChangeString:(NSString *)string changeColor:(UIColor *)changeColor changeFont:(UIFont *)font sourceString:(NSString *)sourceString;


/**
 对数字字符串进行处理，默认保留两位小数
 
 @param num 数字字符串
 @return 返回值
 */
+(NSString *)countNumAndChangeformat:(NSString *)num;

/**
 判断一个字符串是不是包含汉子
 @param str 字符串
 @return 汉字
 */
+(BOOL)isHasChineseWithStr:(NSString *)str;
/**
 判断字符串是不是全部为数字
 
 @param string 字符串
 @return 返回值
 */
+(BOOL)isAllNum:(NSString *)string;
/**
 判断一个字符串是不是全部为字母
 
 @param string 字符串
 @return 返回值
 */
+(BOOL)isAllEnglish:(NSString *)string;

/**
 判断密码是不是为6~12的数字字母及下划线
 
 @param passWord 密码
 @return 返回值
 */
+(BOOL)checkPassWord:(NSString *)passWord;

/**
 判断是不是手机号码
 
 @param string 手机号码
 @return 返回值
 */
+(BOOL)isPhoneNumber:(NSString *)string;

/**
 手机号中间四位加星号处理
 
 @param phoneNumberString 手机号
 @return 加星号之后的手机号
 */
+(NSString *)phoneNumberasterisk:(NSString *)phoneNumberString;

/**
 标准化手机号
 
 @param phoneNumber 手机号
 @return 返回值
 */
+(NSString *)phoneNumberFormate:(NSString *)phoneNumber;

/**
 检验用户输入的身份证号是不是有效的
 
 @param userIdCard 身份号码
 @return 返回值
 */
+(BOOL)checkUserIdCard:(NSString *)userIdCard;


/**
 检验银行卡号是不是符合
 
 @param bankCard 银行卡
 @return 返回值
 */
+(BOOL)checkBankCard:(NSString *)bankCard;


/**
 格式化显示银行卡号
 
 @param bankCard 银行卡号
 @return 返回值
 */
+(NSString *)formatterBankCard:(NSString *)bankCard;


/**
 根据图片名自动加@2x @3x
 
 @param name 图片名
 */
+(NSString *)adjustScreenImageName:(NSString *)name;

/*
 是否直辖市
 */
+(BOOL)isMianCity:(NSString *)city;

/*
 通过一个字典生成url后的拼接参数
 */
+(NSString *)urlPramsStrWithDic:(NSDictionary *)params;

/*
 大于0的非字母的数字 用于充值提现金额输入判断
 */
+ (BOOL)isFloatNumString:(NSString *)str;


/**
 大于5000块提示
 */
+ (BOOL)isMaxMoney:(NSString *)str;

/*
 字符串的高度
 */
+(CGFloat)getHeightWithText:(NSString *)str
                       font:(UIFont *)font
                   MaxWidth:(CGFloat)MaxWidth
                  lineSpace:(CGFloat)lineSpace;


/*
 *  判断用户输入的密码是否符合规范，符合规范的密码要求：
 1. 长度6~12位数字字母组合
 2. 密码中必须同时包含数字和字母
 */
+(BOOL)judgePassWordLegal:(NSString *)pass;

/**
 判断邀请码是不是合法
 */
+(BOOL)judgeInvitationCodeWith:(NSString *)codeString;


//加减乘除运算
// 加
- (NSString *)pz_stringNumberByAdding:(NSString *)stringNumber;


- (NSString *)pz_stringNumberByAdding:(NSString *)stringNumber withBehavior:(SYDecimalNumberHandler *)handler;

// 减
- (NSString *)pz_stringNumberBySubtracting:(NSString *)stringNumber;
- (NSString *)pz_stringNumberBySubtracting:(NSString *)stringNumber withBehavior:(SYDecimalNumberHandler *)handler;

// 乘
- (NSString *)pz_stringNumberByMultiplyingBy:(NSString *)stringNumber;
- (NSString *)pz_stringNumberByMultiplyingBy:(NSString *)stringNumber withBehavior:(SYDecimalNumberHandler *)handler;

// 除 、分
- (NSString *)pz_stringNumberByDividingBy:(NSString *)stringNumber;
- (NSString *)pz_stringNumberByDividingBy:(NSString *)stringNumber withBehavior:(SYDecimalNumberHandler *)handler;





/**
 判断是不是整数倍

 @param integer 谁的整数倍
 @param textString 输入值
 @return 饭
 */
+(BOOL)judgeIntegerMultiple:(NSInteger)integer TextString:(NSString *)textString;

@end
